package com.bdqn.web;

import com.bdqn.constant.Constants;
import com.bdqn.pojo.SysUser;
import com.bdqn.service.SysUserService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * IndexController 处理登录和注销
 *
 * @author LILIBO
 * @since 2025/2/28
 */
@Controller
public class IndexController {

    /**
     * 注入 SysUserService 对象
     */
    @Resource
    private SysUserService sysUserService;

    /**
     * 跳转到登录页
     */
    @GetMapping("/")
    public String index() {
        // 转发的方式跳转到登录页面（request信息会保留）
        return "login";
    }

    /**
     * 跳转到首页
     */
    @GetMapping("/main")
    public String toIndex() {
        return "main";
    }

    /**
     * 跳转到登录页
     */
    @GetMapping("/login")
    public String toLogin() {
        // 转发的方式跳转到登录页面（request信息会保留）
        return "login";
    }

    /**
     * 执行登录操作
     */
    @PostMapping("/login")
    public String doLogin(HttpServletRequest request, HttpSession session, @RequestParam("usrName") String usrName, @RequestParam("usrPassword") String usrPassword) {
        // 调用业务层方法执行登录操作
        SysUser loginUser = sysUserService.login(usrName, usrPassword);

        // 【控制，路线1】根据登录结果判断登录是否成功
        if (loginUser == null) {
            // 登录失败，将提示信息保存到Request作用域中，转发到登录页面
            request.setAttribute("message", "用户名或密码错误");
            return "login";
        }

        // 将用户信息保存到Session中（对应页面${sessionScope.loginUser}取值）
        session.setAttribute(Constants.SESSION_USER, loginUser);

        // 【控制，路线2】跳转到首页（使用redirect:重定向的方式，在URL上显示的是重定向的地址，也就是 /index）
        return "redirect:/main";
    }

    /**
     * 执行注销操作
     */
    @GetMapping("/logout")
    public String logout(HttpSession session) {
        // 执行注销操作，销毁Session
        session.removeAttribute("loginUser"); // 移除Session中的登录用户信息
        session.invalidate(); // 销毁Session

        // 跳转到登录页面（使用redirect:重定向的方式，在URL上显示的是重定向的地址，也就是 /login）
        return "redirect:/login";
    }

}
